// 配置axios
// 导入 axios
import axios from 'axios'
import store from '@/store'
import router from '@/router'

// 配置axios
const request = axios.create({
  // 根路径
  baseURL: 'http://www.liulongbin.top:3008'
  // baseURL: 'http://big-event-vue-api-t.itheima.net'
  // 配置全局请求头 第一种方案
  // headers: {
  //  Authorization: token字符串
  // }
})

// 第二种方案  官方给出的配置
// requert.defaults.headers.common['Authorization'] = token字符串

// 第三种方案  使用请求拦截器 但是拦截器的话，所有请求都会自带请求头
// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // config 就是请求的对象  （请求方式中 后面那个跟的对象）
    // config.headers.Authorization = token字符串

    if (config.url.startsWith('/my/')) {
      config.headers.Authorization = store.state.user.token
    }
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加相应拦截器  用来判断是否 token 过期, 还是假的
// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    // console.log(error) 是一个错误信息对象, 里面有一个response属性, 包含了错误信息
    // error.response 是一个对象, 类似 result对象
    if (error.response) {
      const { data: res } = error.response
      if (res.code === 1 && res.message === '身份认证失败！') {
        // 进入这个判断, 说明用户用了过期的或者假的 token
        // 则移除token
        store.commit('user/updateToken', '')
        store.commit('user/updateUser', '')
        router.push('/login')
      }
    }
    return Promise.reject(error)
  }
)

// 导出
export default request
